﻿#pragma once

#include "Misc/CommonMacros.h"
#include "Containers/Map.h"
#include "Containers/Delegate.h"
class ITickable;

//管理帧跳对象
class WHENGINE_API CTickableManager
{
public:

    void Register(ITickable* InTickable)
    {
        assert(InTickable);
        AllTickables.Add(InTickable,true);
    } 

    void Unregister(ITickable* InTickable)
    {
        //注销可能发生在Tick中，所以需要将对象标记为不存活而不是直接移除
        //否则出现遍历容器时删除元素，会导致迭代器失效
        AllTickables[InTickable]=false;
    }

    void Tick(float DeltaSeconds);

protected:
    TMap<ITickable*,bool/*对象是否存活*/> AllTickables;
};